package br.com.sig.cadastro.produto.presentation.action;

import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import org.primefaces.event.FileUploadEvent;

import br.com.sig.business.exception.BaseException;
import br.com.sig.cadastro.pessoas.business.model.entity.PessoaJuridica;
import br.com.sig.cadastro.produto.business.model.bo.ProdutoBO;
import br.com.sig.cadastro.produto.business.model.embeddable.Dimensao;
import br.com.sig.cadastro.produto.business.model.entity.Imagem;
import br.com.sig.cadastro.produto.business.model.entity.Produto;
import br.com.sig.cadastro.produto.business.service.ProdutoService;
import br.com.sig.presentation.action.BaseAction;
import br.com.sig.presentation.event.UploadedImagemEvent;

@Named
@ViewScoped
public class ProdutoAction extends BaseAction<Produto> {

	private static final long serialVersionUID = 8145041617872746861L;
	
	@Inject
	private ProdutoBO produtoBO;
	
	@Inject
	private ProdutoService produtoService;

	@PostConstruct
	public void init() {
		setService(produtoBO);
//		beanManager.fireEvent(new UploadedImagemEvent(null));
	}
	
	@Override
	public void initInstance() {
		super.initInstance();
		beanManager.fireEvent(new UploadedImagemEvent(getInstance().getImagem()));
	}
	
	@Override
	protected Produto createInstance() {
		Produto produto = super.createInstance();
		produto.setFabricante(new PessoaJuridica());
		produto.setDimensao(new Dimensao());
		produto.setImagem(new Imagem());
		return produto;
	}
	
	public boolean hasFabricante() {
		return getInstance().getFabricante().getId() != null;
	}
	
	public void gerarCampos() {
		if (getInstance().getTipoDeProduto() != null && getInstance().getCor() != null) {
			getInstance().gerarCodigo();
		}
		
		if (getInstance().getTipoDeProduto() != null &&
				getInstance().getComplemento() != null &&
				getInstance().getCor() != null) {
			getInstance().gerarNome();
		}		
	}
	
	public void calcularValorDeCusto() {
		try {
			produtoService.calcularValorDeCusto(getInstance());
		} catch (BaseException e) {
			messages.error(e.getMessage());
		}
	}
	
	public void upload(FileUploadEvent event) {
		getInstance().getImagem().setNome(event.getFile().getFileName());
		getInstance().getImagem().setFile(event.getFile().getContents());

        beanManager.fireEvent(new UploadedImagemEvent(getInstance().getImagem()));
		
		messages.info("Arquivo adicionado com sucesso.");
	}
}